<?php
namespace App;

use App\Common\SignatureHelper;

function getHeader($key)
{
    $header = [
        'Content-Type: application/json',
        'API-KEY: ' . $key,
        'API-SIGNATURE-METHOD: HmacSHA256',
        'API-SIGNATURE-VERSION: 1',
        'API-TIMESTAMP: ' . msectime(),
        'API-UNIQUE-ID: ',
        'API-SIGNATURE:' . rand64(),
    ];
    return $header;
}

function curl($url, $metcod = 'POST', $data = '', $header = '')
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $metcod);

    curl_setopt($ch,CURLOPT_HTTPHEADER, $header
    );
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $document = curl_exec($ch);
    if (!curl_errno($ch)) {
        $info = curl_getinfo($ch);
        // echo 'Took ' . $info['total_time'] . ' seconds to send a request to ' . $info['url'];
    } else {
        throw new \Exception("Curl error: " . curl_error($ch));
    }
    curl_close($ch);

    return $document;
}

function msectime() {
    list($msec, $sec) = explode(' ', microtime());
    $msectime =  (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
    return $msectime;
}

function rand64(){
    $num = '';
    for ($i = 0; $i<64; $i++)
    {
        $num .= mt_rand(0, 9);
    }
    return $num;

}

/**
 * 发送短信
 */
function sendSms($phone) {

    $params = array ();

    // *** 需用户填写部分 ***

    // fixme 必填: 请参阅 https://ak-console.aliyun.com/ 取得您的AK信息
    $accessKeyId = "LTAID85Fszxuo2F3";
    $accessKeySecret ="CZYNwuWDNX3Tt1RTfi6qarhKkCjRdi";

    // fixme 必填: 短信接收号码
    $params["PhoneNumbers"] = "$phone";

    // fixme 必填: 短信签名，应严格按"签名名称"填写，请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/sign
    $params["SignName"] = "币用宝";

    // fixme 必填: 短信模板Code，应严格按"模板CODE"填写, 请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/template
    $params["TemplateCode"] = "SMS_132655086";
    $code = rand(111111,999999);

    // fixme 可选: 设置模板参数, 假如模板中存在变量需要替换则为必填项
    $params['TemplateParam'] = Array (
        "code" => $code,
        "product" => "11"
    );
    \PhalApi\DI()->cache->set('sms'.$phone, $code, 300);
    // fixme 可选: 设置发送短信流水号
    $params['OutId'] = "12345";

    // fixme 可选: 上行短信扩展码, 扩展码字段控制在7位或以下，无特殊需求用户请忽略此字段
    $params['SmsUpExtendCode'] = "1234567";


    // *** 需用户填写部分结束, 以下代码若无必要无需更改 ***
    if(!empty($params["TemplateParam"]) && is_array($params["TemplateParam"])) {
        $params["TemplateParam"] = json_encode($params["TemplateParam"], JSON_UNESCAPED_UNICODE);
    }

    // 初始化SignatureHelper实例用于设置参数，签名以及发送请求
    $helper = new SignatureHelper();
    //echo "<pre>";print_r($params);exit();
    // 此处可能会抛出异常，注意catch
    $content = $helper->request($accessKeyId,$accessKeySecret,"dysmsapi.aliyuncs.com",array_merge($params, array("RegionId" => "cn-hangzhou","Action" => "SendSms","Version" => "2017-05-25",))
    // fixme 选填: 启用https
    // ,true
    );

    return objectToArray($content);
}

function objectToArray($e){
    $e=(array)$e;
    foreach($e as $k=>$v){
        if( gettype($v)=='resource' ) return;
        if( gettype($v)=='object' || gettype($v)=='array' )
            $e[$k]=(array)$this->objectToArray($v);
    }
    return $e;
}

function decimalNotation($num){
    $parts = explode('E', $num);
    if(count($parts) != 2){
        return $num;
    }
    $exp = abs(end($parts)) + 3;
    $decimal = number_format($num, $exp);
    $decimal = rtrim($decimal, '0');
    return rtrim($decimal, '.');
}